home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 076-100 / disk_077 / samples / ack.d next >
Text File  |  1992-05-06  |  687b  |  39 lines

  1. #include:util.g
  2.  
  3. /*
  4.  * ACK - simple program to calculate Ackerman's function.
  5.  */
  6.  
  7. proc ack(int m, n)int:
  8.  
  9.     if m = 0 then
  10.     n + 1
  11.     elif n = 0 then
  12.     ack(m - 1, 1)
  13.     else
  14.     ack(m - 1, ack(m, n - 1))
  15.     fi
  16. corp;
  17.  
  18. proc usage()void:
  19.  
  20.     writeln("Use is: ack m n    m & n are positive integers");
  21.     exit(1);
  22. corp;
  23.  
  24. proc main()void:
  25.     channel input text chin;
  26.     int m, n;
  27.  
  28.     open(chin, GetPar());
  29.     if not read(chin; m) or m < 0 then
  30.     usage();
  31.     fi;
  32.     open(chin, GetPar());
  33.     if not read(chin; n) or n < 0 then
  34.     usage();
  35.     fi;
  36.     /* we write a BEL at the end, since this can be kinda slooooooow */
  37.     writeln("Ack(", m, ", ", n, ") = ", ack(m, n), '\(0x07)');
  38. corp;
  39.